package br.ufpa.cbcc2007.dikemon.engine;

// Classe que contém métodos estáticos para converter Strings
//  em arrays de bytes.
public class StringFix {
	// Estado de detectção... Essa logica precisa ser refeita
	//  0 normal, 1 special,  3 variables, 4 strings; 
	private static int state;

	// Traduz uma string em um array de bytes.
	public static byte[] translate(String txt) {
		state = 0;
		byte[] result = new byte[txt.length()];
		int compl = 0;
		int i;
		for (i = 0; compl < txt.length(); i++) {
			byte temp;
			do{
				temp =  translateChar(txt.charAt(compl));
				compl++;
			} while(temp == (byte)-1);
			result[i] = temp;
		}
		return result;
	}

	//Traduz um único caractere
	private static byte translateChar(char ch) {
		switch (state){
		case 0:
			switch (ch) {
			case 'Ç':
				return (byte) 96;
			case 'Á':
				return (byte) 97;
			case 'À':
				return (byte) 98;
			case 'Â':
				return (byte) 99;
			case 'Ã':
				return (byte) 100;
			case 'É':
				return (byte) 101;
			case 'Ê':
				return (byte) 102;
			case 'Í':
				return (byte) 103;
			case 'Ó':
				return (byte) 104;
			case 'Ô':
				return (byte) 105;
			case 'Õ':
				return (byte) 106;
			case 'ç':
				return (byte) 107;
			case 'á':
				return (byte) 108;
			case 'à':
				return (byte) 109;
			case 'â':
				return (byte) 110;
			case 'ã':
				return (byte) 111;
			case 'é':
				return (byte) 112;
			case 'ê':
				return (byte) 113;
			case 'í':
				return (byte) 114;
			case 'ó':
				return (byte) 115;
			case 'ô':
				return (byte) 116;
			case 'õ':
				return (byte) 117;
// Esses tipos não devem ser atualizados aqui, mas sim na hora de exibir
//			case '#': 
//				state = 1;
//				return (byte) -1;
//			case '@':
//				return (byte) -2;
			default:
				if(ch < 127)
					return (byte) (ch - 32);
				break;
			}
			break;
// Esses tipos não devem ser atualizados aqui, mas sim na hora de exibir
//		case 1:
//			state = 0;
//			switch (ch) {
//			case '!':
//				return 95;
//			case '#':
//				return '#'-32;
//			case '@':
//				return '@'-32;
//			default:
//				break;
//			}
		}
		return 0;
	}
}
